<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="//gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.68.3" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>nginx的正向代理和反向代理、负载均衡 &middot; 我的博客</title>

  
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  
</head>

  <body class="theme-base-0b ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/my_technology_blog/"><h1>我的博客</h1></a>
      <p class="lead">
       杨博的博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/my_technology_blog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2021. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="post">
  <h1>nginx的正向代理和反向代理、负载均衡</h1>
  <time datetime=2020-06-17T14:40:20&#43;0800 class="post-date">Wed, Jun 17, 2020</time>
  <h1 id="nginx概述">nginx概述</h1>
<p>nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器；同时也是一个IMAP、POP3、SMTP代理服务器；nginx可以作为一个HTTP服务器进行网站的发布处理，另外nginx可以作为反向代理进行负载均衡的实现。</p>
<p>这里主要通过三个方面简单介绍nginx</p>
<ul>
<li>反向代理</li>
<li>负载均衡</li>
<li>nginx特点</li>
</ul>
<h3 id="正向代理"><strong>正向代理</strong></h3>
<p>正向代理最大的特点是客户端非常明确要访问的服务器地址；服务器只清楚请求来自哪个代理服务器，而不清楚来自哪个具体的客户端；正向代理模式屏蔽或者隐藏了真实客户端信息。</p>
<p>我们都知道我们国家的互联网是有一道防火墙的，如果我们工作中因为种种原因要访问国外的网站，我们就会发现访问不到。这个时候我们我们连上一个国外VPN就能访问国外的网站了。VPN就是代理服务器。这种代理模式就是正向代理。</p>
<p><img src="C:%5Cwww%5Chugo_blog%5Cpublic%5Cimg%5C%E6%AD%A3%E5%90%91%E4%BB%A3%E7%90%86.jpg" alt=""></p>
<h3 id="反向代理">反向代理</h3>
<p>通过上述的图解大家就可以看清楚了，多个客户端给服务器发送的请求，nginx服务器接收到之后，按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的，但是请求具体由哪台服务器处理的并不明确了，nginx扮演的就是一个反向代理角色</p>
<p>反向代理，主要用于服务器集群分布式部署的情况下，反向代理隐藏了服务器的信息！</p>
<p>项目场景</p>
<p>通常情况下，我们在实际项目操作时，正向代理和反向代理很有可能会存在在一个应用场景中，正向代理代理客户端的请求去访问目标服务器，目标服务器是一个反向单利服务器，反向代理了多台真实的业务处理服务器。</p>
<p><img src="C:%5Cwww%5Chugo_blog%5Cpublic%5Cimg%5C%E6%AD%A3%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86.jpg" alt=""></p>
<h3 id="负载均衡">负载均衡</h3>
<p>nginx支持的负载均衡调度算法方式如下：</p>
<ol>
<li>weight轮询（默认）：接收到的请求按照顺序逐一分配到不同的后端服务器，即使在使用过程中，某一台后端服务器宕机，nginx会自动将该服务器剔除出队列，请求受理情况不会受到任何影响。 这种方式下，可以给不同的后端服务器设置一个权重值（weight），用于调整不同的服务器上请求的分配率；权重数据越大，被分配到请求的几率越大；该权重值，主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。</li>
<li>权重(weight)  ：指定轮询几率，weight和访问比率成正比，用于后端服务器性能不均的情况。</li>
<li>ip_hash（ip绑定）：每个请求按照发起客户端的ip的hash结果进行匹配，这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器，这也在一定程度上解决了集群部署环境下session共享的问题。</li>
<li>fair（第三方插件）：智能调整调度算法，动态的根据后端服务器的请求处理到响应的时间进行均衡分配，响应时间短处理效率高的服务器分配到请求的概率高，响应时间长处理效率低的服务器分配到的请求少；结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法，如果要使用这种调度算法，请安装upstream_fair模块。（按后端服务器相应速度来分配请求，响应时间短的优先分配）</li>
<li>url_hash（url绑定）：按照访问的url的hash结果分配请求，每个请求的url会指向后端固定的某个服务器，可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法，要使用的话需要安装nginx的hash软件包</li>
</ol>
<p><img src="C:%5Cwww%5Chugo_blog%5Cpublic%5Cimg%5C%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1.jpg" alt=""></p>

</div>


    </main>

    
  </body>
</html>
